// 导入Vue库
import Vue from 'vue'
// 导入Vuex库，用于状态管理
import Vuex from 'vuex'
// 导入getters文件，用于获取状态的函数集合
import getters from './getters'

// 安装Vuex到Vue，使每个Vue实例都具有访问Vuex状态管理功能
Vue.use(Vuex)

// 使用require.context方法加载所有模块文件，该方法返回一个上下文对象，可以通过该对象动态加载模块
const modulesFiles = require.context('./modules', true, /\.js$/)

// 通过reduce函数遍历所有模块文件，动态创建并合并模块
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  // 提取模块名称，通过正则表达式匹配文件路径并提取模块名
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  // 根据模块路径获取模块内容，并将默认导出值赋给modules对象的对应模块名属性
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

// 创建Vuex的Store实例，传入所有模块和getters
const store = new Vuex.Store({
  modules,
  getters
})

// 导出Store实例作为默认值，供其他组件使用和访问
export default store
